#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
//QTextEdit多行输入框控件示例
//设置文本框和多行输入框，同步两个控件中显示的内容
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //构建文本框控件 尺寸大小和位置信息
    label=new QLabel(this);
    label->setGeometry(0,0,500,200);

    //构建多行输入框控件 尺寸大小和位置信息
    text_edit1=new QTextEdit(this);
    text_edit1->setGeometry(0,200,500,200);

    //textChanged()-文本内容发生改变时，触发此信号
    connect(text_edit1,&QTextEdit::textChanged,this,&Widget::handler);

    //测试多个信号
    text_edit2=new QTextEdit(this);
    text_edit2->setGeometry(0,450,600,300);
    //textChanged()-文本内容发生改变时，触发此信号
    connect(text_edit2,&QTextEdit::textChanged,this,&Widget::handler_textChanged);

    //selectionChanged()-选中的文本的范围改变时(鼠标/shift利用光标选中时)，触发此信号
    connect(text_edit2,&QTextEdit::selectionChanged,this,&Widget::handler_selectionChanged);

    //cursorPositionChanged()-光标移动时，触发此信号
    connect(text_edit2,&QTextEdit::cursorPositionChanged,this,&Widget::handler_cursorPositionChanged);

    //undoAvailable(bool)-进行undo撤销操作时，触发此信号
    connect(text_edit2,&QTextEdit::undoAvailable,this,&Widget::handler_undoAvailable);

    //redoAvailable(bool)-进行redo对撤销进行撤销操作时，触发此信号
    connect(text_edit2,&QTextEdit::redoAvailable,this,&Widget::handler_redoAvailable);

    //copyAvailable(bool)-文本被选中 或 取消选中时，触发此信号
    connect(text_edit2,&QTextEdit::copyAvailable,this,&Widget::handler_copyAvailable);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handler()
{
    //获取当前多行输入框中的文本内容
    QString str=text_edit1->toPlainText();
    //将这个文本内容设置进入label文本框中
    label->setText(str);
}

//textChanged()-文本内容发生改变时，触发此信号
void Widget::handler_textChanged()
{
    //打印多行输入框中的文本信息
    qDebug()<<"textChanged 文本内容发生改变 :"<<text_edit2->toPlainText();
}
//selectionChanged()-选中的文本的范围改变时(鼠标/shift利用光标选中时)，触发此信号
void Widget::handler_selectionChanged()
{
    //获取此刻光标信息
    QTextCursor cursor=text_edit2->textCursor();//获取光标位置信息
    qDebug()<<"selectionChanged 选中的文本的范围改变时 :"<<cursor.selectedText();//打印光标所选中的文本内容
}
//cursorPositionChanged()-光标移动时，触发此信号
void Widget::handler_cursorPositionChanged()
{
    //获取光标信息
    QTextCursor cursor=text_edit2->textCursor();
    //打印当前光标位置信息
    qDebug()<<"cursorPositionChanged 光标移动时 :"<<cursor.position();
}
//undoAvailable(bool)-进行undo撤销操作时，触发此信号
void Widget::handler_undoAvailable(bool b)
{
    //当前撤销操作是否可以进行
    qDebug()<<"undoAvailable 进行undo撤销操作时 :"<<b;
}
//redoAvailable(bool)-进行redo对撤销进行撤销操作时，触发此信号
void Widget::handler_redoAvailable(bool b)
{
    //当前对撤销进行撤销操作是否可以进行
    qDebug()<<"redoAvailable 进行redo对撤销进行撤销操作时 :"<<b;
}
//copyAvailable(bool)-文本被选中 或 取消选中时，触发此信号
void Widget::handler_copyAvailable(bool b)
{
    //当前文本被选中 或 取消选中操作 的状态
    //true:选中状态，false:未选中状态
    qDebug()<<"copyAvailable 文本被选中 或 取消选中时 :"<<b;
}
